package com.terracloud.server.common.stats;

import com.google.gson.JsonArray;

/**
 * 设备资源监控指标服务接口
 * 负责收集设备资源使用情况并上报到PushGateway
 */
public interface DeviceMetricsService {

    /**
     * 上报设备资源指标到PushGateway
     *
     * @param tenantId 租户ID
     * @param deviceId 设备ID
     * @param memoryTotalBytes 内存总量(bytes)
     * @param memoryAvailableBytes 可用内存量(bytes)
     * @param cpuLoadPercentage CPU负载百分比
     * @param diskTotalBytes 磁盘总量(bytes)
     * @param diskAvailableBytes 可用磁盘空间(bytes)
     * @param networkBytesSent 网络发送字节数
     * @param networkBytesRecv 网络接收字节数
     */
    void reportDeviceMetrics(String tenantId, String deviceId,
                             Long memoryTotalBytes, Long memoryAvailableBytes,
                             Double cpuLoadPercentage,
                             Long diskTotalBytes, Long diskAvailableBytes,
                             Long networkBytesSent, Long networkBytesRecv);

    /**
     * 上报设备VPN连接状态指标
     *
     * @param deviceId 设备ID
     * @param tenantId 租户ID
     * @param nodeName 节点名称
     * @param connected VPN连接状态 (true表示连接，false表示断开)
     */
    void reportDeviceVpnConnectionStatus(String deviceId, String tenantId, String nodeName, boolean connected);

    /**
     * 上报心跳次数
     *
     * @param tenantId 租户ID
     * @param deviceId 设备ID
     */
    void reportHeartbeat(String tenantId, String deviceId);
    
    /**
     * 上报心跳异常警告
     *
     * @param tenantId 租户ID
     * @param deviceId 设备ID
     */
    void reportHeartbeatError(String tenantId, String deviceId);
    
    /**
     * 上报数据采集相关指标
     *
     * @param deviceId 设备ID
     * @param tenantId 租户ID
     * @param inputs 数据采集信息数组
     */
    void reportDataCollectionMetrics(String deviceId, String tenantId, JsonArray inputs);
    
    /**
     * 上报数据交付相关指标
     *
     * @param deviceId 设备ID
     * @param tenantId 租户ID
     * @param outputs 数据交付信息数组
     */
    void reportDataDeliveryMetrics(String deviceId, String tenantId, JsonArray outputs);
                                 
    /**
     * 上报数据产品相关指标
     *
     * @param deviceId 设备ID
     * @param tenantId 租户ID
     * @param total 数据产品总量
     * @param used 数据产品已用量
     * @param unused 数据产品未用量
     */
    void reportDataProductMetrics(String deviceId, String tenantId, int total, int used, int unused);
    
    /**
     * 上报数据资源相关指标
     *
     * @param deviceId 设备ID
     * @param tenantId 租户ID
     * @param total 数据资源总量
     * @param database 数据库类型资源数量
     * @param api API类型资源数量
     * @param txt 文本类型资源数量
     */
    void reportDataSourceMetrics(String deviceId, String tenantId, int total, int database, int api, int txt);
}